home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks ’92 / NetWarmer / source / MainMenu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-22  |  3.5 KB  |  187 lines  |  [TEXT/KAHL]

  1. /* MainMenu.c */
  2. /* Created 3/13/4 1:08 PM by AppMaker */
  3.  
  4.  
  5. #include "Globals.h"
  6. #include "ResourceDefs.h"
  7. #include "FileM.h"
  8. #include "EditM.h"
  9.  
  10. #include "MainMenu.h"
  11.  
  12. #define NIL            0L
  13.  
  14. /*----------*/
  15. void InitTitles ()
  16. {
  17.     InitFileM ();
  18.     InitEditM ();
  19.     } /*InitTitles*/
  20.  
  21. /*----------*/
  22. void LoadMenus ()
  23. {
  24.     AppleMenu    = GetMenu (AppleID);
  25.     AddResMenu (AppleMenu, 'DRVR');
  26.     FileMenu    = GetMenu (FileID);
  27.     EditMenu    = GetMenu (EditID);
  28.     
  29.     InsertMenu (AppleMenu, 0);
  30.     InsertMenu (FileMenu, 0);
  31.     InsertMenu (EditMenu, 0);
  32.     
  33.     DrawMenuBar ();
  34. } /*LoadMenus*/
  35.  
  36. /*----------*/
  37. static void DoAbout (void);
  38. static void DoAbout ()
  39. {
  40.     short            itemNr;
  41.     
  42.     itemNr = Alert (AboutID, nil);
  43. } /*DoAbout*/
  44.  
  45. /*----------*/
  46. void DoApple (short        itemNr);
  47. void DoApple (itemNr)
  48. short            itemNr;
  49. {
  50.     Str255            name;
  51.     short            refNum;
  52.  
  53.     switch (itemNr) {
  54.     case AppleAbout:
  55.             DoAbout ();
  56.         break;
  57.         default:
  58.             GetItem (AppleMenu, itemNr, name);
  59.             refNum = OpenDeskAcc (name);
  60.         break;
  61.     } /*switch*/
  62. } /*DoApple*/
  63.  
  64. /*----------*/
  65. void DoMenu (menuChoice)
  66. long            menuChoice;
  67. {
  68.     short            menuID;
  69.     short            itemNr;
  70.  
  71.     menuID = HiWord (menuChoice);
  72.     itemNr = LoWord (menuChoice);
  73.     
  74.     switch (menuID) {
  75.     case 0:
  76.             /*Do nothing*/;
  77.         break;
  78.     case AppleID:
  79.             DoApple (itemNr);
  80.         break;
  81.     case FileID:
  82.             DoFile (itemNr);
  83.         break;
  84.     case EditID:
  85.             DoEdit (itemNr);
  86.         break;
  87.         } /*switch*/
  88.  
  89.     HiliteMenu (0);
  90. } /*DoMenu*/
  91.  
  92. /*----------*/
  93. MenuHandle        menu;
  94. Boolean            menuBarChanged;
  95.  
  96. /*----------*/
  97. static void Enable (short            itemNr,
  98.          Boolean        enabled);
  99. static void Enable (itemNr, enabled)
  100. short        itemNr;
  101. Boolean        enabled;
  102. {
  103.     if (enabled) {
  104.         EnableItem  (menu, itemNr);
  105.     } else {
  106.         DisableItem (menu, itemNr);
  107.     }
  108. } /*Enable*/
  109.  
  110. /*----------*/
  111. static void EnableTitle (MenuHandle    menu,
  112.               Boolean        enabled);
  113. static void EnableTitle (menu, enabled)
  114. MenuHandle        menu;
  115. Boolean            enabled;
  116. {
  117.     if (enabled != ((**menu).enableFlags & 1)) {
  118.         menuBarChanged = true;
  119.     }
  120.     if (enabled) {
  121.         EnableItem  (menu, 0);
  122.     } else {
  123.         DisableItem (menu, 0);
  124.     }
  125. } /*EnableTitle*/
  126.  
  127. /*----------*/
  128. void UpdateMenus ()
  129. {
  130.     WindowPeek        frontPeek;
  131.     Boolean            isFront;    /*is there a front window?*/
  132.     Boolean            isCur;        /*is there a current window?*/
  133.     Boolean            isDirty;    /*is it dirty?*/
  134.     Boolean            hasFile;    /*does it have a file?*/
  135.     Boolean            isSelected;    /*is anything selected?*/
  136.     Boolean            isDesk;        /*is the front window a desk acc?*/
  137.     Boolean            isText;        /*is there a current text field?*/
  138.     Boolean            isScrap;    /*is there any scrap?*/
  139.  
  140.     menuBarChanged = false;
  141.  
  142.     isFront        = (FrontWindow () != nil);
  143.     isCur        = (curWindow != nil);
  144.     isDirty     = false;
  145.     hasFile     = false;
  146.     isSelected    = false;
  147.     if (isCur) {
  148.         isDirty        =  cur->dirty;
  149.         hasFile        = (cur->fileNum != 0);
  150.     }
  151.  
  152.     isDesk = false;
  153.     if (isFront) {
  154.         frontPeek    = (WindowPeek) FrontWindow ();
  155.         isDesk        = (frontPeek->windowKind < 0);
  156.     }
  157.     isText        = isCur && (cur->text != nil);
  158.     isScrap        = false;
  159.     if (isText) {
  160.         isSelected    = ((**(cur->text)).selStart != (**(cur->text)).selEnd);
  161.         isScrap        = (TEGetScrapLen () > 0);
  162.     }
  163.  
  164.     menu = FileMenu;
  165.     Enable (FileClose,        isFront);
  166.     Enable (FileSave,        isDirty);
  167.     Enable (FileSaveAs,        hasFile);
  168.     Enable (FileRevert,        isDirty && hasFile);
  169.     
  170.     menu = EditMenu;
  171.     if (isFront) {
  172.         Enable (EditUndo,        isDesk);
  173.         Enable (EditCut,        isDesk || isSelected);
  174.         Enable (EditCopy,        isDesk || isSelected);
  175.         Enable (EditPaste,        isDesk || isScrap);
  176.         Enable (EditClear,        isDesk || isSelected);
  177.         Enable (EditSelectAll,    isText);
  178.         }
  179.     EnableTitle (EditMenu,     isFront);
  180.     
  181.         
  182.     if (menuBarChanged) {
  183.         DrawMenuBar ();
  184.     }
  185. } /*UpdateMenus*/
  186.  
  187. /* MainMenu */